home *** CD-ROM | disk | FTP | other *** search
- /*
- so.c - A simple shift-in/shift-out filter.
-
- Reads from standard input, writes to standard output.
- Input is text encoded in an 8-bit character set.
- Output is 7-bit text with imbedded <SO> and <SI> sequences.
-
- F. da Cruz, Columbia University, 1991.
- */
- #include <stdio.h>
-
- main() {
- int i = 0; /* Int version of current character */
- unsigned char c; /* Char version of current char */
- int state = 0; /* Shift In/Out state */
-
- char *latin1 = "\033-A"; /* ISO 2022: designate Latin1 to G1 */
- /* printf("%s", latin1); */ /* Uncomment if necessary */
-
- while ((i = getchar()) != EOF) { /* Get a character, test for end. */
- c = i; /* Convert to character. */
- if (c > 127) { /* If an 8-bit character */
- if (state == 0) { /* and we're not shifted */
- putchar('\16'); /* Output SO = Ctrl-N */
- state = 1; /* Change state to shifted */
- }
- } else if (state == 1) { /* 7-bit character and shifted */
- putchar('\17'); /* Output SI = Ctrl-O */
- state = 0; /* Change state to unshifted */
- }
- putchar(c & 127); /* Now output the character itself */
- } /* (low-order 7 bits only) */
- }
-